package com.kayak.weixin.service;

import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.kayak.weixin.msg.response.TextMessage;
import com.kayak.weixin.util.MsgUtil;
import com.kayak.weixin.util.OAuthUtil;

/**
 * 核心服务类
 * @author myt
 *
 */
public class CoreService {

	/**
	 * 处理微信发来的请求
	 * 
	 * @param request
	 * @return xml
	 */
	public static String processRequest(HttpServletRequest request,Map<String,Object> wxMap) {
		// xml格式的消息数据
		String respXml = null;
		// 默认返回的文本消息内容
		String respContent = "未知的消息类型！";
		try {
			// 调用parseXml方法解析请求消息
			Map<String, String> requestMap = MsgUtil.parseXml(request);
			// 发送方帐号
			String fromUserName = requestMap.get("FromUserName");
			// 开发者微信号
			String toUserName = requestMap.get("ToUserName");
			// 消息类型
			String msgType = requestMap.get("MsgType");
			// 消息内容
			String Content = requestMap.get("Content");

			// 回复文本消息
			TextMessage textMessage = new TextMessage();
			textMessage.setToUserName(fromUserName);
			textMessage.setFromUserName(toUserName);
			textMessage.setCreateTime(new Date().getTime());
			textMessage.setMsgType(MsgUtil.RESP_MESSAGE_TYPE_TEXT);

			// 文本消息
			if (msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_TEXT)) {
				if(Content.equals("收不到工资条")||Content.equals("没有收到")||Content.equals("没收到")||Content.equals("月工资")){
					respContent="您好，请先完成身份认证。如您已完成身份验证，点击底部菜单“查看工资条”即可查看最近一条工资条。请您确认您所属公司已发放工资条；如已发放，但您未收到，请联系您所属公司财务或人事为您补发工资条。";
					String url = wxMap.get("oauth_url").toString() 
						    +"?mpid="+wxMap.get("mpid"); //请求参数 
					String OAuthUrl = new OAuthUtil().getOAuthUrl(wxMap.get("appid").toString(),url);
				}else if(Content.equals("工资")||Content.equals("工资条")||Content.equals("组合工资条")||Content.equals("复合工资条")||Content.equals("多家银行")||Content.equals("多银行")||Content.equals("多笔工资")){
					respContent="您好，请先完成身份证认证，如您已完成认证，当您的公司发放工资条后，您将第一时间收到属于您的微信工资条。";
					String url = wxMap.get("oauth_url").toString() 
						    +"?mpid="+wxMap.get("mpid"); //请求参数 
					String OAuthUrl = new OAuthUtil().getOAuthUrl(wxMap.get("appid").toString(),url);
				}else if(Content.equals("手机号")||Content.equals("手机")){
					respContent="您好，请您联系您所属公司财务或人事，更新/修改您员工信息中手机号。";
					String url = wxMap.get("oauth_url").toString() 
						    +"?mpid="+wxMap.get("mpid"); //请求参数 
					String OAuthUrl = new OAuthUtil().getOAuthUrl(wxMap.get("appid").toString(),url);
				}else if(Content.equals("微信公众号")||Content.equals("公众号")||Content.equals("微信号")){
					respContent="您好，您可以通过微信扫描您所属公司提供的“放薪管家”二维码或在微信“添加朋友”-“公众号”中搜索【放薪管家】，点击公众号关注即可。您还可以进入微信公众号详情，点击右上角菜单，选择“推荐给朋友”即可分享关注微信公众号。";
					String url = wxMap.get("oauth_url").toString() 
						    +"?mpid="+wxMap.get("mpid"); //请求参数 
					String OAuthUrl = new OAuthUtil().getOAuthUrl(wxMap.get("appid").toString(),url);
				}else if(Content.equals("身份认证")||Content.equals("认证")){
					respContent="微信看工资条，就在“放薪管家”！"+"\n";
					String url = wxMap.get("oauth_url").toString() 
						    +"?mpid="+wxMap.get("mpid"); //请求参数 
					String OAuthUrl = new OAuthUtil().getOAuthUrl(wxMap.get("appid").toString(),url);
					respContent = respContent + "<a href=\""+OAuthUrl+"\">"+wxMap.get("subscribe_url_text").toString()+"</a>";
					respContent = respContent +	"\n"+"开启全新工资条体验。"+"\n"+"想了解更多，请回复【客服】"+"\n"+"详情请致电放薪管家客服电话4008821081-2";
				}else if(Content.equals("有问题")||Content.equals("不对")||Content.equals("错误")){
					respContent="如您对工资条详情有任何疑问，详情请咨询您所属公司财务或人事。";
					String url = wxMap.get("oauth_url").toString() 
						    +"?mpid="+wxMap.get("mpid"); //请求参数 
					String OAuthUrl = new OAuthUtil().getOAuthUrl(wxMap.get("appid").toString(),url);
				}else if(Content.equals("验证码")||Content.equals("短信")){
					respContent="您好，请联系放薪管家微信客服或拨打400电话4008821081-2为您人工处理。";
					String url = wxMap.get("oauth_url").toString() 
						    +"?mpid="+wxMap.get("mpid"); //请求参数 
					String OAuthUrl = new OAuthUtil().getOAuthUrl(wxMap.get("appid").toString(),url);
				}else if(Content.equals("客服")){
					textMessage.setMsgType("transfer_customer_service");
				}else{
					respContent = wxMap.get("subscribe_text").toString()+"\n\n";
					
					String url = wxMap.get("oauth_url").toString() 
						    +"?mpid="+wxMap.get("mpid"); //请求参数 
				//	System.out.println("oauthurl:"+url);
					String OAuthUrl = new OAuthUtil().getOAuthUrl(wxMap.get("appid").toString(),url);
					respContent = respContent + "<a href=\""+OAuthUrl+"\">"+wxMap.get("subscribe_url_text").toString()+"</a>";
				}
			}
			// 图片消息
			else if (msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_IMAGE)) {
			//	respContent = "您发送的是图片消息！";
			}
			// 语音消息
			else if (msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_VOICE)) {
			//	respContent = "您发送的是语音消息！";
			}
			// 视频消息
			else if (msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_VIDEO)) {
			//	respContent = "您发送的是视频消息！";
			}
			// 地理位置消息
			else if (msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_LOCATION)) {
			//	respContent = "您发送的是地理位置消息！";
			}
			// 链接消息
			else if (msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_LINK)) {
			//	respContent = "您发送的是链接消息！";
			}
			// 事件推送
			else if (msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_EVENT)) {
				// 事件类型
				String eventType = requestMap.get("Event");
				// 关注
				if (eventType.equals(MsgUtil.EVENT_TYPE_SUBSCRIBE)) {
					respContent = wxMap.get("subscribe_text").toString()+"\n\n";
					
					String url = wxMap.get("oauth_url").toString() 
						    +"?mpid="+wxMap.get("mpid"); //请求参数 
				//	System.out.println("oauthurl:"+url);
					String OAuthUrl = new OAuthUtil().getOAuthUrl(wxMap.get("appid").toString(),url);
					respContent = respContent + "<a href=\""+OAuthUrl+"\">"+wxMap.get("subscribe_url_text").toString()+"</a>";
				}
				// 取消关注
				else if (eventType.equals(MsgUtil.EVENT_TYPE_UNSUBSCRIBE)) {
					// TODO 取消订阅后用户不会再收到公众账号发送的消息，因此不需要回复
				}
				// 扫描带参数二维码
				else if (eventType.equals(MsgUtil.EVENT_TYPE_SCAN)) {
					// TODO 处理扫描带参数二维码事件
				}
				// 上报地理位置
				else if (eventType.equals(MsgUtil.EVENT_TYPE_LOCATION)) {
					// TODO 处理上报地理位置事件
				}
				// 自定义菜单
				else if (eventType.equals(MsgUtil.EVENT_TYPE_CLICK)) {
					// TODO 处理菜单点击事件
				}
			}
			// 设置文本消息的内容
			textMessage.setContent(respContent);
			
			// 将文本消息对象转换成xml
			respXml = MsgUtil.messageToXml(textMessage);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return respXml;
	}
}
